//
//	MiscPathField.h -- a MiscClipTextField subclass for displaying long 
//					   pathnames
//		Written and Copyright (c) 1995 by Balazs Pataki. 
//				Version 1.0.  All rights reserved.
//
//		This notice may not be removed from this source code.
//
//	This object is included in the MiscKit by permission from the author
//	and its use is governed by the MiscKit license, found in the file
//	"LICENSE.rtf" in the MiscKit distribution.  Please refer to that file
//	for a list of all applicable permissions and restrictions.
//	

#import <appkit/appkit.h>
#import	<misckit/MiscString.h>
#import <objc/objc-runtime.h>
#import "MiscPathField.h"
#import "MiscClipTextFieldCell.h"


#define	CLASS_NAME		"MiscPathField"
#define	CLASS_VERSION	1



/*
						********************************
						*                              *
						*        MiscPathField         *
						*                              *
						********************************
*/

@implementation MiscPathField

+ initialize
// Set class version
{
	if (self == objc_lookUpClass(CLASS_NAME))  {
		[self setVersion:CLASS_VERSION];
	}
	return self;
}

- initFrame:(const NXRect *)rect
// Initializes a newly allocated MiscPathField for clipping its string value
// using '/' (slash) as clipping delimiter and sets clipping to happen on the
// left
{
	[super initFrame:rect];
	
	[self setClipDelimiters:"/"];
	[self setClipOnRight:NO];
	[[self cell] setDelegate:self];
	shouldUseTilde = YES;	
	
	return self;
}

- stringWillBeClipped:theString
{
	if ( shouldUseTilde )
		[theString replaceHomeWithTilde];

	return self;
}


- setReplaceHomeWithTilde:(BOOL) flag
// If flag is YES and the current string value is a user path, then replaces
// the home part of the path with a '~' (tilde) 
{
	shouldUseTilde = flag;
	//[self setStringValue:[self fullStringValue]];
	
	return self;
}

- (BOOL)doesReplacesHomeWithTilde
{
	return shouldUseTilde;
}

- write:(NXTypedStream *)stream
{
    [super write:stream];
    
    NXWriteType(stream, @encode(BOOL), &shouldUseTilde);
   
    return self;
}


- read:(NXTypedStream *)stream
{
    [super read:stream];
   
	NXReadType(stream, @encode(BOOL), &shouldUseTilde);

	return self;
}

- awake
{
	[[self cell] setDelegate:self];
	return self;
}


@end



@implementation MiscPathField(IBStuff)

- (const char *)getInspectorClassName
{
	return "MiscPathFieldInspector";
}

@end
